package com.dream.wukong.common.core.interfaces.dao;

/**
 * @Author: wuyichao
 * @Description:
 * @Date: Created in 10:52 2018/9/18.
 * @Modified:
 */

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 *
 * 实体读取操作接口类，该接口类只定义对实体的读取操作
 *
 */
public interface IQueryDao<T extends BaseEntity<PK>, PK extends Serializable> {
    /**
     * 通过ID获取一个实体
     */
    T get(PK id);

    /**
     * 获取T类型的所有实体列表
     */
    List<T> getAll();

    /**
     * 获取总记录数
     */
    Integer getCount();

    /**
     * 按给定的条件值查询实体列表
     */
    List<T> findList(String hql,Object... values);

    List<T> findList(String hql, Map<String, Object> paramMap);

    public T findOne(String hql,Object... values);

    public T findOne(String hql, Map<String, Object> paramMap);

    public List<T> findListBySql(String hql,Object... values);

    public List<T> findListBySql(String hql, Map<String, Object> paramMap);

    public T findOneBySql(String hql,Object... values);

    public T findOneBySql(String hql, Map<String, Object> paramMap);

    /**
     * 通过参数条件， 获取一个页面数据
     *
     */
    public PageResult<T> getPagedList(final String hql,final PageResult<T> pageResult, Object... values);

    /**
     * 获取一个页面数据
     *
     */
    public PageResult<T> getPagedList(final String hql,final PageResult<T> pageResult,final Map<String, Object> paramMap);

    Integer getCount(String paramString, Map<String, Object> paramMap);

}